#include "tableshow.h"

//================================== 患者列表界面  ==========================================

TableShow::TableShow(QWidget *parent) : QWidget(parent)
{
    dataLayout = nullptr;
    tableView = nullptr;
    model = nullptr;
}

void TableShow::tableShow(QString tableName)
{
    if (dataLayout == nullptr)
    {
        dataLayout = new QVBoxLayout(this);
    }
    if (tableView == nullptr)
    {
        // 用于显示表数据
        tableView = new QTableView(this);
        // 设置表格交替行颜色，提高可读性
        tableView->setAlternatingRowColors(true);
        // 设置选择行为为按行选择
        tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
        // 设置选择模式为单行选择
        tableView->setSelectionMode(QAbstractItemView::SingleSelection);
        dataLayout->addWidget(tableView);
        this->setLayout(dataLayout);
    }

    if (!connectToDatabase())
    {
        QMessageBox::critical(this, "错误", "无法连接到数据库");
        return;
    }

    // 使用 QSqlTableModel 作为数据模型
    if (model == nullptr)
    {
        model = new QSqlTableModel(this, db);
    }
    // 将数据模型设置给表格视图
    tableView->setModel(model);

    if (!displayTableData(tableName))
    {
        QMessageBox::critical(this, "错误", "无法显示表数据");
    }

    // 调整列宽以适应内容
    tableView->resizeColumnsToContents();
}


bool TableShow::connectToDatabase()
{
    // 数据库连接
    // 使用唯一的连接名称添加 MySQL 数据库连接
    if (!QSqlDatabase::contains(connectionName)) {
        db = QSqlDatabase::addDatabase("QMYSQL", connectionName);
        db.setHostName("127.0.0.1");
        db.setPort(3306);
        db.setDatabaseName("IMA_System");
        db.setUserName("root");
        db.setPassword("123456");
    } else {
        db = QSqlDatabase::database(connectionName);
    }
    if(db.open())
    {
        qDebug()<<"table-----------数据库连接成功";
        return true;
    }
    else
    {
        qDebug()<<"table-----------数据库连接失败"<<"失败原因："<<db.lastError().text();
        return false;
    }
}


bool TableShow::displayTableData(const QString &tableName)
{
    qDebug()<<__FUNCTION__;
    qDebug()<<"-----------------------------------";
    // 使用已有的 Model 来管理数据
    model->setTable(tableName);
    // model->setDatabase(db); // 明确设置 QSqlTableModel 的数据库连接

    if (!model->select()) {
        qDebug() << "查询失败：" << model->lastError().text();
        qDebug() << "数据库是否有效：" << model->database().isValid();
        qDebug() << "表名是否正确设置：" << (model->tableName() == tableName);
        qDebug() << "驱动名称：" << model->database().driverName();
        qDebug() << "数据库连接名称：" << model->database().connectionName();
        return false;
    }
    // 重置表格视图，更新显示
    tableView->reset();
    return true;
}


void TableShow::patientData()
{
    tableShow("patients");
}

void TableShow::blackData()
{
    tableShow("blacklist");
}

void TableShow::closeConnect()
{
    db.close();
    if (QSqlDatabase::contains(connectionName)) {
        QSqlDatabase::removeDatabase(connectionName);
    }
}


TableShow::~TableShow()
{
    if (dataLayout) {
        delete dataLayout;
    }
    if (tableView) {
        delete tableView;
    }
    if (model) {
        delete model;
    }
    closeConnect();
}
